/**
 * 
 * @author liaozhanggen 2017年2月16日
 */
package com.choosefine.it.cprivilege.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.choosefine.it.base.BaseController;
import com.choosefine.it.base.dto.PageDTO;
import com.choosefine.it.common.def.CommonConstant;
import com.choosefine.it.common.def.ResultCode;
import com.choosefine.it.common.exception.BusinessException;
import com.choosefine.it.cprivilege.model.ConsoleRole;
import com.choosefine.it.cprivilege.model.dto.RoleAccountDTO;
import com.choosefine.it.cprivilege.model.dto.RoleMenuDTO;
import com.choosefine.it.cprivilege.model.vo.AccountVO;
import com.choosefine.it.cprivilege.service.RoleService;
import com.github.pagehelper.Page;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;

/**
 * 角色操作控制层
 * 
 * Author：liaozhanggen
 * Create Date：2017年2月16日
 * Version：v2.0
 */
@Api(value="控制台——角色操作",description="廖仉根")
@RestController
@RequestMapping("/role")
public class RoleController extends BaseController {

	@Autowired
	private RoleService roleService;

	/**
	 * 添加角色
	 *
	 * @Author：liaozhanggen
	 * @Create Date：2017年2月16日
	 * @param：....
	 * @return：String
	 */
	@ApiOperation(value="添加角色")
	@PostMapping("/addrole")
	public String addRole(@RequestBody RoleMenuDTO roleMenuDTO) throws BusinessException{
		if (StringUtils.isEmpty(roleMenuDTO.getRoleName())) {
			throw new BusinessException(ResultCode.FAILED, CommonConstant.PARAMETER_ERROR);
		}
		int num  = roleService.saveRole(roleMenuDTO);
		
		return num > 0 ? responseSuccess() : responseFail();
	}

	/**
	 * 编辑角色
	 *
	 * @Author：liaozhanggen
	 * @Create Date：2017年2月16日
	 * @param：....
	 * @return：String
	 */
	@ApiOperation(value="编辑角色")
	@PostMapping("/editrole/{id}")
	public String modifyRole(@RequestBody RoleMenuDTO roleMenuDTO,@PathVariable("id") int id) throws BusinessException{
		if (StringUtils.isEmpty(roleMenuDTO.getRoleName())) {
			throw new BusinessException(ResultCode.FAILED, CommonConstant.PARAMETER_ERROR);
		}
		int num  = roleService.updateRole(roleMenuDTO,id);
		
		return num > 0 ? responseSuccess() : responseFail();
	}

	/**
	 * 查询角色下的菜单关系信息
	 *
	 * @Author：liaozhanggen
	 * @Create Date：2017年2月17日
	 * @param：....
	 * @return：String
	 */
	@ApiOperation(value="查询角色下的菜单关系信息")
	@GetMapping("/rolemenus/{id}")	
	public String findRoleMenusByRoleId(@PathVariable(name="id") int id){
		return responseSuccess(roleService.queryOwnerMenuByRoleId(id));
	}
	
	/**
	 * 删除角色
	 *
	 * @Author：liaozhanggen
	 * @Create Date：2017年2月16日
	 * @param：....
	 * @return：String
	 */
	@ApiOperation(value="删除角色")
	@GetMapping("/deleterole/{id}")
	public String removeRole(@PathVariable("id") int id) throws BusinessException{
		if (id == 0) {
			throw new BusinessException(ResultCode.FAILED, CommonConstant.PARAMETER_ERROR);
		}
		int num  = roleService.deleteRole(id);
		
		return num > 0 ? responseSuccess() : responseFail();
	}

	
	/**
	 * 分页查询
	 *
	 * @Author：liaozhanggen
	 * @Create Date：2017年2月16日
	 * @param：....
	 * @return：String
	 */
	@ApiOperation(value="查询(批量)角色信息")
	@ApiImplicitParams({
		@ApiImplicitParam(name = "roleName", value = "角色名称", dataType = "String", required = false, paramType = "query"),
		@ApiImplicitParam(name = "pageNum", value = "起始页", dataType = "int", required = true, paramType = "query"),
		@ApiImplicitParam(name = "pageSize", value = "每页行", dataType = "int", required = true, paramType = "query")
	})
	@GetMapping("/queryrole")
	public String queryRolePage(@RequestParam(name="roleName",required=false) String roleName,PageDTO pageDTO){
		Page<ConsoleRole> roles = roleService.queryRolePage(pageDTO, roleName);
		return responseSuccess(null == roles ? roles : roles.toPageInfo());
	}
	
	/**
	 * 角色添加对应的成员管理
	 * @throws BusinessException 
	 *
	 * @Author：liaozhanggen
	 * @Create Date：2017年2月20日
	 * @param：....
	 * @return：String
	 */
	@ApiOperation(value="角色-添加对应的成员")
	@PostMapping("/addmember")
	public String addRoleAccount(@RequestBody RoleAccountDTO roleAccountDTO) throws BusinessException{
		roleService.addRoleAccount(roleAccountDTO);
		return responseSuccess();
	}
	
	/**
	 * 查询指定角色的对应成员-无分页
	 * @throws BusinessException 
	 *
	 * @Author：liaozhanggen
	 * @Create Date：2017年2月20日
	 * @param：....
	 * @return：String
	 */
	@ApiOperation(value="查询指定角色的对应成员-无分页")
	@GetMapping("/querymember/{roleId}")
	public String queryRoleMember(@PathVariable("roleId") int roleId) throws BusinessException{
		List<AccountVO> accRoles = roleService.queryRoleAccount(roleId);
		return responseSuccess(accRoles);
	}
	
}
